package com.gomcarter.frameworks.base.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.List;
import java.util.Map;

/**
 * 基础属性
 *
 * @author zyh
 * create on 2023/3/10 9:10
 */
@Data
@ConfigurationProperties(value = BaseConfConst.BASE_CONFIG_PREFIX)
public class BaseConfProperties {
    /**
     * 是否启用跨域
     */
    private boolean crossEnabled;
    /**
     * 追加的允许跨域请求头
     */
    private String appendAllowHeaders;
    /**
     * 是否启用表单
     */
    private boolean formEnabled;
    /**
     * 是否启用文件上传
     */
    private boolean multiFileEnabled;
    /**
     * 单个文件上传容量(单位M), 默认2M
     */
    private Integer maxFileSize;
    /**
     * 多文件总上传容量(单位M), 默认6M
     */
    private Integer maxRequestSize;
    /**
     * 探活首页路径
     */
    private String indexLocation;
    /**
     * form表单最大列表长度
     */
    private Integer autoGrowCollectionLimit = 4098;
    /**
     * 响应体是否包含为值为null的属性,默认包含
     */
    private boolean includeNullField = true;

    /**
     * 是否启用返回对象属性转换
     * @deprecated Jackson自定义PropertyNamingStrategy使用需要特别谨慎，避免因为业务使用不当，Jackson缓存机制造成字段精简运行异常
     */
    @Deprecated
    private boolean enablePropertyTransformer = false;

    /**
     * Jackson属性转换URI模式匹配列表
     * @deprecated Jackson自定义PropertyNamingStrategy使用需要特别谨慎，避免因为业务使用不当，Jackson缓存机制造成字段精简运行异常
     */
    @Deprecated
    private List<String> propertyTransformerUriPatternList;

    /**
     * Jackson属性转换映射关系，按照别名来做序列化和反向序列化
     * @deprecated Jackson自定义PropertyNamingStrategy使用需要特别谨慎，避免因为业务使用不当，Jackson缓存机制造成字段精简运行异常
     */
    @Deprecated
    private Map<String, String> propertyTransformerMapping;

    /**
     * 启用Enum解析器，Spring使用Converter来反序列化@RequestParam和@PathVariable值
     */
    private boolean enableEnumResolver = false;

    /**
     * 枚举解析静态方法名称，这个作为基础方法，将来可以增加支持枚举自定义方法
     */
    private String enumResolverMethodName = "resolve";

    /**
     * 是否启用日志降级
     */
    private boolean enableLogPrintDegrade = false;
    /**
     * 日志降级内容列表
     */
    private List<String> logPrintDegradePrefixList;
}
